/* 
 * IChamadoBO.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.business;

import java.util.Date;
import java.util.List;

import br.com.pma.chamatec.exception.ChamatecNegocioException;
import br.com.pma.entity.Chamado;
import br.com.pma.entity.Usuario;

/**
 * Interface de negócio da entidade Chamado.
 *
 * @author Ludemeula Fernandes de Sá
 */
public interface IChamadoBO {
	
	/**
	 * Salva uma ordem de serviço da entidade Chamado.
	 * 
	 * @param chamado
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Chamado salvar(Chamado chamado) throws ChamatecNegocioException;

	/**
	 * Avalia uma ordem de serviço da entidade Chamado.
	 * 
	 * @param chamado
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Chamado avaliar(Chamado chamado) throws ChamatecNegocioException;

	/**
	 * Aprova uma ordem de serviço da entidade Chamado.
	 * 
	 * @param chamado
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Chamado aprovar(Chamado chamado) throws ChamatecNegocioException;

	/**
	 * Reprova uma ordem de serviço da entidade Chamado.
	 * 
	 * @param chamado
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Chamado reprovar(Chamado chamado) throws ChamatecNegocioException;

	/**
	 * Executa uma ordem de serviço da entidade Chamado.
	 * 
	 * @param chamado
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Chamado executar(Chamado chamado) throws ChamatecNegocioException;

	/**
	 * Lista os dados da tabela Chamado pela descrição.
	 * 
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public List<Chamado> getListDescricao() throws ChamatecNegocioException;

	/**
	 * Pesquisa todas as ordens de serviço em aberto.
	 * 
	 * @param chamado
	 * @param solicitante
	 * @param usuario
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public List<Chamado> pesquisar(Chamado chamado, Usuario solicitante, Usuario usuario) throws ChamatecNegocioException;

	/**
	 * Pesquisa todas as ordens de serviço autorizadas.
	 * 
	 * @param chamado
	 * @param solicitante
	 * @param usuario
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public List<Chamado> acompanhar(Chamado chamado, Usuario solicitante, Usuario usuario) throws ChamatecNegocioException;

	/**
	 * Gera o relatório de chamados com base nos filtros informados.
	 * 
	 * @param chamado
	 * @param dataInicial
	 * @param dataFinal
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public List<Chamado> gerar(Chamado chamado, final Date dataInicial, final Date dataFinal) throws ChamatecNegocioException;
}